<?php
class Zen_Module extends Zen_Base
{
    protected $_Zen_Module = array();

    //查找当前Module属于哪个Vendor
    public function vendor($module)
    {
        if (!isset(Zen::$vendor)) {
            //查找模块是否存在
            if (Zen_Dir::exists(Zen::$system."/app/App/Vendor/".$module)) {
               //先查找用户空间
               Zen::$vendor = "app";
            } else if (Zen_Dir::exists(Zen::$system."/zen/Zen/Vendor/".$module)) {
                //再查找Zen空间
                Zen::$vendor = "zen";
            } else {
                //不存在则抛出异常
                throw $this->_exception("ERR_NO_EXIST_MODULE", array("module"=>$module));
            }
        }
        return Zen::$vendor;
    }

    //获得vendor, module, action绝对路径，外部不能直接调用
    private function _path($spec=null)
    {
        $vendor = $this->vendor(Zen::$module);
        switch($spec){
            case 'action':
                return $this->_path('module')."/".Zen::$action;
                break;
            case 'module':
                return $this->_path('vendor')."/".Zen::$module;
                break;
            case 'vendor':
            default:
                return Zen::$system."/".$vendor."/".ucfirst($vendor)."/Vendor";
                break;
        }
    }

    //使用getVendor、getModule或getAction调用
    public function __call($method, $arg_array)
    {
        $spec = strtolower(substr($method, 3));
        if ('get' != substr($method, 0, 3) ||
        !in_array($spec, array('vendor', 'module', 'action'))) {
            //抛出异常
            throw $this->_exception("ERR_NO_EXIST_METHOD", array('method' => $method));
        }
        
        return $this->_path($spec);
    }
}